package com.study.d012Components;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.ScheduledService;
import javafx.concurrent.Task;
import javafx.geometry.NodeOrientation;
import javafx.scene.Scene;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
import javafx.util.Duration;

/**
 * 进度条 ， 两种进度条用法基本一样；  ProgressBar 是 ProgressIndicator 的子类
 * 	ProgressBar         水平进度条
 *	ProgressIndicator   饼状进度条
 */
public class ProgereeBarMain extends Application{
	ScheduledService<Double> sch;

	public static void main(String[] args) {
		launch(args);
	}

	@Override
	public void start(Stage stage) throws Exception {
		AnchorPane anchorPane = new AnchorPane();
		stage.show();

		stage.setScene(new Scene(anchorPane, 400, 300));

		ProgressBar pb =  new ProgressBar();
		//设置进度值
		//pb.setProgress(0.2);

		//设置为不确定值,即进度条来回移动
		pb.setProgress(ProgressIndicator.INDETERMINATE_PROGRESS);

		//设置宽高， 注意，在JDK9中需要使用setMinSize()方法
		pb.setPrefHeight(5);
		pb.setPrefWidth(300);

		//JDK9使用
		//pb.setMinSize(5, 300);

		//设置进度条方向
		//pb.setNodeOrientation(NodeOrientation.RIGHT_TO_LEFT);

		anchorPane.getChildren().add(pb);



		//监听进度
		pb.progressProperty().addListener(new ChangeListener<Number>() {

			@Override
			public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
				System.out.println(newValue.doubleValue());
			}
		});

		//设置进度
		sch = new ScheduledService<Double>() {
			double i=0;
			@Override
			protected Task<Double> createTask() {
				Task<Double> task = new Task<Double>() {

					@Override
					protected Double call() throws Exception {
						return i=i+0.1;
					}

					//更新组件
					@Override
					protected void updateValue(Double value) {
						//因为是double类型，所有不可能刚好等于1，这样要判断为大于1
						if(i > 1){
							sch.cancel();
						}
						pb.setProgress(i);
					}

				};
				return task;
			}

		};


		sch.setDelay(Duration.millis(0));
		sch.setPeriod(Duration.millis(1000));
		sch.start();


		//饼状进度条
		ProgressIndicator pi = new ProgressIndicator();
		anchorPane.getChildren().add(pi);
		AnchorPane.setTopAnchor(pi, 100.0);

	}
}
